package com.app.oral.dao

import com.app.oral.model.FileDeleteFailureRecord
import com.app.oral.model.FileDeleteStatus
import com.app.oral.model.FileDeleteSourceType
import org.apache.ibatis.annotations.Mapper

@Mapper
interface FileDeleteFailureMapper {
    
    /**
     * 插入失败记录
     */
    fun insert(record: FileDeleteFailureRecord): Int
    
    /**
     * 根据ID查询
     */
    fun selectById(id: Long): FileDeleteFailureRecord?
    
    /**
     * 查询待处理的记录
     */
    fun selectPendingRecords(): List<FileDeleteFailureRecord>
    
    /**
     * 查询需要重试的记录（状态为PENDING且距离上次重试超过1小时）
     */
    fun selectRetryableRecords(): List<FileDeleteFailureRecord>
    
    /**
     * 更新记录状态
     */
    fun updateById(record: FileDeleteFailureRecord): Int
    
    /**
     * 根据文件ID删除记录
     */
    fun deleteByFileId(fileId: String): Int
    
    /**
     * 批量删除已成功的记录
     */
    fun deleteByFileIds(fileIds: List<String>): Int
    
    /**
     * 统计各状态记录数量
     */
    fun countByStatus(status: FileDeleteStatus): Int
    
    /**
     * 删除超过指定天数的永久失败记录
     */
    fun deleteOldFailedRecords(days: Int): Int
    
    /**
     * 检查文件ID是否已存在
     */
    fun existsByFileId(fileId: String): Boolean
}